package com.itheima.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;
//精准匹配是什么风格的
@RestControllerAdvice(annotations = {RestController.class, Controller.class})
//打印日志信息
@Slf4j
//定义异常处理机制
public class GlobalExeptionHandler {
    //异常注释
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    //要逮什么异常
    public R handlerSQLConstraintException(SQLIntegrityConstraintViolationException exception){
       //打印日志信息
        log.error(exception.getMessage());
        //拿到具体的异常信息
        String message = exception.getMessage();
        //精准逮重名异常
        if(message.contains("Duplicate entry")){
            //根据空格切割 得到字符串数组数组的第0，1，2第2个就是传递的重名的
            String[] messages = message.split(" ");
            //返回具体名和信息
            return R.error(messages[2]+"已存在");
        }
        //如果没逮到重名的异常就是其他异常给出信息
        return R.error("数据异常");
    }
    //处理我们的自定义业务异常
    @ExceptionHandler(BusinessException.class)
    public R handlerBusinessException(BusinessException exception){
        log.error(exception.getMessage());
        return R.error(exception.getMessage());
    }
}
